#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//引入连接Mysql的头文件和lib包
#include "mysql/mysql.h"
#pragma comment(lib, "libmysql")

//定义一些数据库连接需要的宏
#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASE "test"

void exeSql(char* sql)
{
	MYSQL my_connection;	//数据库的连接
	int res;	//执行sql语句后的返回标志
	MYSQL_RES* res_ptr;	//执行结果
	MYSQL_ROW result_row;	//按行返回查询信息
	int row, column;	//定义行数,列数
	mysql_init(&my_connection);
	if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS))
	{
		printf("数据库连接成功！");
		//设置查询编码为 utf-8，支持中文
		mysql_query(&my_connection, "set names utf8");
		res = mysql_query(&my_connection, sql);
		if (res)
		{
			//执行失败
			printf("Error: mysql_query!\n");
		}
		else
		{
			//mysql_affected_rows会返回执行sql后影响的行数
			printf("%lld行受到影响！\n", mysql_affected_rows(&my_connection));
			//把查询结果装入 res_ptr
			res_ptr = mysql_store_result(&my_connection);
			//存在则输入
			if (res_ptr)
			{
				//获取行数，列数
				row = mysql_num_rows(res_ptr);
				column = mysql_num_fields(res_ptr);
				//执行输出结果，从第二行开始循环（第一行是字段名）
				for (int i = 1; i < row + 1; i++)
				{
					//一行数据
					result_row = mysql_fetch_row(res_ptr);
					for (int j = 0; j < column; j++)
					{
						printf("%s ", result_row[j]);
					}
					printf("\n");
				}
			}
		}
		//关闭数据库连接
		mysql_close(&my_connection);
	}
	else
	{
		printf("数据库连接失败！\n");
	}
}

int main()
{
	char* sql = "select * from user";
	exeSql(sql);

	return 0;
}
